Skip to content

实战-Docker方式安装Jenkins-20230319-测试成功-荐

Day2-实战:Docker方式安装Jenkins-2023.3.19(测试成功)-荐

image-20230319112028407

目录

[toc]

实验环境

bash
win10笔记本
1台虚机 centos7.6 1810 vmworkstation 
jenkins/jenkins:2.346.3-2-lts-jdk11
docker 20.10.21

1台linux虚机(Jenkins用docker启动,agent直接跑在宿主机上。)

实验软件(无)

前置条件

  • docker环境已安装(本次版本:20.10.21)

  • 安装好jdk11

Jenkins是由Java语言开发的,运行需要提前安装好JDK。注意最新版本之后不在兼容JDK8而是需要JDK11+版本

Jenkins Server和Agent的运行都需要依赖JDK;(Jenkins是docker安装的,其环境里自带了java,但是jenkins agent环境也是需要安装jdk的,因此这里的测试虚机就需要安装jdk11了。)

image-20230319112001050

1、安装Jenkins Server

0.安装jdk环境

⚠️ 我的测试环境,是在一台虚机上跑了一个jenkins容器。但后面添加一个jenkins agent时,是将这个虚机作为其agent使用,因此这个虚机也要安装java环境的!!!

不管你是jenkins master节点,还是agent节点,都是需要jdk环境的!

bash
#安装
[root@Devops6 ~]#yum install -y java-11-openjdk.x86_64
……
Installed:
  java-11-openjdk.x86_64 1:11.0.18.0.10-1.el7_9                                                                                                                                                   

Dependency Installed:
  copy-jdk-configs.noarch 0:3.3-11.el7_9      cups-libs.x86_64 1:1.6.3-51.el7                             dejavu-fonts-common.noarch 0:2.33-6.el7       dejavu-sans-fonts.noarch 0:2.33-6.el7     
  fontconfig.x86_64 0:2.13.0-4.3.el7          fontpackages-filesystem.noarch 0:1.44-8.el7                 giflib.x86_64 0:4.1.6-9.el7                   graphite2.x86_64 0:1.3.10-1.el7_3         
  harfbuzz.x86_64 0:1.7.5-2.el7               java-11-openjdk-headless.x86_64 1:11.0.18.0.10-1.el7_9      javapackages-tools.noarch 0:3.4.1-11.el7      libICE.x86_64 0:1.0.9-9.el7               
  libSM.x86_64 0:1.2.2-2.el7                  libX11.x86_64 0:1.6.7-4.el7_9                               libX11-common.noarch 0:1.6.7-4.el7_9          libXau.x86_64 0:1.0.8-2.1.el7             
  libXext.x86_64 0:1.3.3-3.el7                libXi.x86_64 0:1.7.9-1.el7                                  libXrender.x86_64 0:0.9.10-1.el7              libXtst.x86_64 0:1.2.3-1.el7              
  libfontenc.x86_64 0:1.1.3-3.el7             libjpeg-turbo.x86_64 0:1.2.90-8.el7                         libxcb.x86_64 0:1.13-1.el7                    lksctp-tools.x86_64 0:1.0.17-2.el7        
  pcsc-lite-libs.x86_64 0:1.8.8-8.el7         python-javapackages.noarch 0:3.4.1-11.el7                   python-lxml.x86_64 0:3.2.1-4.el7              ttmkfdir.x86_64 0:3.0.9-42.el7            
  tzdata-java.noarch 0:2022g-1.el7            xorg-x11-font-utils.x86_64 1:7.5-21.el7                     xorg-x11-fonts-Type1.noarch 0:7.5-9.el7      

Complete!

#验证
[root@Devops6 ~]#java --version
openjdk 11.0.18 2023-01-17 LTS
OpenJDK Runtime Environment (Red_Hat-11.0.18.0.10-1.el7_9) (build 11.0.18+10-LTS)
OpenJDK 64-Bit Server VM (Red_Hat-11.0.18.0.10-1.el7_9) (build 11.0.18+10-LTS, mixed mode, sharing)

1.docker拉取jenkins镜像并启动容器

  • 下载jenkins镜像

安装Jenkins的Server节点,Server节点作为主控节点负责调度任务。

进入hub.docker.com官方的镜像仓库,下载Jenkins的镜像。

在dockerhub里搜索jenkins/jenkins,点击tag,搜索jdk11,然后选择jenkins:2.346.3-2-lts-jdk11即可:

https://hub.docker.com/

image-20230319180807179

bash
#这里先拿到安装命令,后面将开始安装
docker pull jenkins/jenkins:2.346.3-2-lts-jdk11

DockerHUB上面有很多版本的镜像,大家根据镜像的更新时间,别找错了🌝🌝好多是4年前的…

我们使用最新LTS版本的Jenkins 2.346.3

1、宿主机上创建Jenkins数据目录

准备一个用于存储Jenkins数据的目录。因为我们用Docker安装的,容器的数据如果没有进行持久化当容器被删除了会出现数据丢失。

我们需要把Jenkins数据目录持久化,先去创建一个本地的目录并赋予权限。

bash
[root@Devops6 ~]#mkdir -p /data/devops6/jenkins_home
[root@Devops6 ~]#chmod 777 -R  /data/devops6/jenkins_home

2、启动Jenkins容器

bash
docker run -itd --name jenkins \
-p 8080:8080 \
-p 50000:50000 \
-e JAVA_OPTS="-Dorg.apache.commons.jelly.tags.fmt.timeZone='Asia/Shanghai" \
--privileged=true  \
--restart=always \
-v /data/devops6/jenkins_home:/var/jenkins_home jenkins/jenkins:2.346.3-2-lts-jdk11

说明:

容器运行后需要开放端口。

8080默认Jenkins web页面使用的端口。

50000是Agent连接Server用到的通信端口。(后面安装JenkinsAgent的时候要注意网络连通性)

时区配置,定义默认的时区。(JAVA_OPTS环境变量为修改时间配置,否则可能jenkins的时间显示有问题!)

持久化数据目录,挂载本地的数据目录。

3、验证

启动Jenkins容器后。然后docker logs 看下日志。在日志中可以获取到激活Jenkins需要用到的密钥字符串。保存下来。

bash
#查看jenkins容器运行状态
[root@Devops6 ~]#docker ps
CONTAINER ID   IMAGE                                 COMMAND                  CREATED         STATUS         PORTS                                                                                      NAMES
d6139736ef4c   jenkins/jenkins:2.346.3-2-lts-jdk11   "/usr/bin/tini -- /u…"   5 seconds ago   Up 3 seconds   0.0.0.0:8080->8080/tcp, :::8080->8080/tcp, 0.0.0.0:50000->50000/tcp, :::50000->50000/tcp   jenkins

#查看jenkins容器log
[root@Devops6 ~]#docker logs jenkins
……
Jenkins initial setup is required. An admin user has been created and a password generated.
Please use the following password to proceed to installation:

315798fcf926460fb1da173032767596

This may also be found at: /var/jenkins_home/secrets/initialAdminPassword
……

2.访问web界面并输入密码

访问http://172.29.9.101:8080/开始配置Jenkins。

填写解锁密钥

image-20220412200907398

  • 可通过如下2种方式来获取密码:
bash
(1)查看docker里的日志文件
[root@Devops6 ~]#docker exec jenkins cat /var/jenkins_home/secrets/initialAdminPassword
315798fcf926460fb1da173032767596

(2)查看jenkins容器日志
[root@Devops6 ~]#docker logs jenkins
……
Jenkins initial setup is required. An admin user has been created and a password generated.
Please use the following password to proceed to installation:

315798fcf926460fb1da173032767596

This may also be found at: /var/jenkins_home/secrets/initialAdminPassword
……
  • 输入密码后,这边的加载一会儿,耐心等一会儿:

image-20220414161955864

image-20220414162029581

加载完成后,出现如下界面:

image-20220414162050826

3.自定义安装插件

  • 点击选择插件来安装

image-20220414162245963

点击,我们先不安装插件,待后续根据需求再安装相应的插件即可:

image-20230319183253533

  • 插件安装完成后,出现如下界面:

image-20220414162714531

  • 自定义安装插件,这里取消安装推荐的插件。只选择语言插件进行安装(本次也不打算安装汉化插件,直接使用jenkins的英文界面了)。(此处不应安装太多的插件,可能会出现网络原因导致安装失败。我们先安装好Jenkins后面用到哪些插件的时候再选择性的安装好)

image-20230319183913142

安装进度也可以通过docker logs查询日志获取。

4.创建一个管理员用户

  • 账户:admin 密码:admin ,输入完成后,点击保存并完成

image-20230319183430336

  • 点击保存并完成

image-20230319183447996

  • 点击开始使用jenkins

image-20230319183502703

这里就进入到了jenkins的主界面:

image-20230319183517057

5、配置Jenkins插件源

1.本次新版本的插件源好像是不用变的

当前jenkins版本:jenkins/jenkins:2.346.3-2-lts-jdk11

  • Jenkins插件源配置地方

image-20230319184250699

image-20230319184312192

image-20230319184718598

https://updates.jenkins.io/update-center.json

  • 如何测试这个源是否可以正常使用

如果在自己浏览器里可以正常访问到这个url的话,那么就证明这个插件源是可以被正常使用的。

https://updates.jenkins.io/update-center.json

image-20230319184743534

可以看到,当前这个插件源是可以被正常使用的。

  • 另外,也可以在Available点击这里的check now,如果出现可用的插件的话,那么就说明这个插件源是可用的。

image-20230319185202814

2.如果是内网机器,可以考虑使用nexus3做一个代理

企业如果限制外网访问,需要通过Nexus代理仓库的方式缓存到内网;

如果是内网机器,可以考虑使用nexus3做一个代理,将这里的url换成代理nexus3的地址。

image-20230319184953016

3.手动上传插件

  • Jenkins上传插件位置

image-20230319184250699

image-20230319184312192

image-20230319184335772

  • Jenkins插件下载位置

https://plugins.jenkins.io/

image-20230319184531090

4.更改插件源的方法

这个测试的jenkins版本为:jenkins/jenkins:2.332.2-centos7-jdk8

可以使用aliyun、清华源中的插件源;

可以使用Jenkins中文社区中的插件源;

  • jenkins官方中文社区源当时测试在这个jenkins版本下用不了!

按老师提供的这个方法,貌似这个源地址对这个版本的jenkins是失效了:。。。(老师也是没测试出来。。。,最后直接更换清华源了!)

image-20220411204501950

image-20220414164509887

image-20220414164532649

image-20220414164454098

image-20220414164437545

image-20220414164803805

  • 因此这里进行更换清华源:

输入清华源链接地址https://mirrors.tuna.tsinghua.edu.cn/

image-20220414165110791

点击updates

image-20220414165147663

看下自己当前jenkins版本:Jenkins 2.332.2)

image-20220414165332771

这里没有Jenkins 2.332.2,用相近的版本也行:

image-20220414165423917

点击update-center.json,然后复制其链接地址即可:

https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/dynamic-stable-2.332.1/update-center.json

image-20220414165505933

  • 得到清清华源地址后,我们再次按上面方式进行配置

https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/dynamic-stable-2.332.1/update-center.json

image-20220414165713879

验证,点击立即获取

image-20220414165746977

可以看到,这个源地址是可以用的:

image-20220414165803264

2、安装配置Jenkins Agent

agent就是真正去执行任务的节点。

1.新建节点,并填写参数配置

  • 首先,我们需要在JenkinsServer上面添加节点。

点击Manege Jenkins-Manage Nodes and Clouds

image-20230319222550444

点击+ New Node

image-20230319222634026

填写Node name,Type选择Permanent Agent,点击Create

image-20230319222718246

配置执行器数量远程工作目录标签Usage内容,其余不变,填写完成后,点击保存:

image-20230319222913051

image-20230319222932190

image-20230319222950353

⚠️ Number of executors

你可以这样理解,我在jenkins上运行一个job,它就会占用一个执行器。它所运行作业的数量,作业的并发数。 所以你在调并发的时候,如果出现队列在排队的情况,那可能是因为这里的执行器数量设置不够!

点击Save后,就可以看到创建好的agent节点了:

image-20230319223345308

  • 另外:如果这里配置了自定义工作目录的话,那么这里的值就会替代上面我们指定的远程工作目录

image-20230319223238283

2.获取agent启动程序并运行agent

  • 在首页点击刚才新建的节点build01

image-20230319223424596

  • 这里agent有2种方式可以连接到jenkins master,我们使用第二种方式:

image-20230319223450720

bash
echo 0af95ad221aa67897c9cb50ebc57bee4c1cb49e7f8bb42fb65b835cabcae2303 > secret-file
java -jar agent.jar -jnlpUrl http://172.29.9.101:8080/computer/build01/jenkins-agent.jnlp -secret @secret-file -workDir "/opt/jenkinsagent"
  • 右键复制agent.jar包,稍后在我们的虚机里将其下载下来:

image-20230319223545189

bash
http://172.29.9.101:8080/jnlpJars/agent.jar
  • 创建agent目录并下载agent.jar包:
bash
[root@Devops6 ~]#cd /data/devops6/
[root@Devops6 devops6]#ls
jenkins_home
[root@Devops6 devops6]#mkdir jenkins_agent
[root@Devops6 devops6]#cd jenkins_agent/

[root@Devops6 jenkins_agent]#wget http://172.29.9.101:8080/jnlpJars/agent.jar
--2023-03-19 22:37:29--  http://172.29.9.101:8080/jnlpJars/agent.jar
Connecting to 172.29.9.101:8080... connected.
HTTP request sent, awaiting response... 200 OK
Length: 1522481 (1.5M) [application/java-archive]
Saving to: ‘agent.jar’

100%[================================================================================================================================================================>] 1,522,481   --.-K/s   in 0.04s   

2023-03-19 22:37:29 (38.6 MB/s) - ‘agent.jar’ saved [1522481/1522481]

[root@Devops6 jenkins_agent]#ll
total 1488
-rw-r--r-- 1 root root 1522481 Mar 19 18:27 agent.jar
  • 编写启动脚本:
bash
[root@Devops6 jenkins_agent]#pwd
/data/devops6/jenkins_agent

[root@Devops6 jenkins_agent]#echo 0af95ad221aa67897c9cb50ebc57bee4c1cb49e7f8bb42fb65b835cabcae2303 > secret-file
[root@Devops6 jenkins_agent]#vim start.sh #将刚才网页出现的第二种方式的代码拷贝进去
#!/bin/bash
java -jar agent.jar -jnlpUrl http://172.29.9.101:8080/computer/build01/jenkins-agent.jnlp -secret @secret-file -workDir "/opt/jenkinsagent"
  • 启动脚本并查看:
bash
[root@Devops6 jenkins_agent]#pwd
/data/devops6/jenkins_agent
[root@Devops6 jenkins_agent]#ls
agent.jar  start.sh
[root@Devops6 jenkins_agent]#sh start.sh 
Mar 19, 2023 10:39:45 PM org.jenkinsci.remoting.engine.WorkDirManager initializeWorkDir
INFO: Using /opt/jenkinsagent/remoting as a remoting work directory
Mar 19, 2023 10:39:45 PM org.jenkinsci.remoting.engine.WorkDirManager setupLogging
INFO: Both error and output logs will be printed to /opt/jenkinsagent/remoting
Mar 19, 2023 10:39:45 PM hudson.remoting.jnlp.Main createEngine
INFO: Setting up agent: build01
Mar 19, 2023 10:39:45 PM hudson.remoting.jnlp.Main$CuiListener <init>
INFO: Jenkins agent is running in headless mode.
Mar 19, 2023 10:39:45 PM hudson.remoting.Engine startEngine
INFO: Using Remoting version: 4.13.3
Mar 19, 2023 10:39:45 PM org.jenkinsci.remoting.engine.WorkDirManager initializeWorkDir
INFO: Using /opt/jenkinsagent/remoting as a remoting work directory
Mar 19, 2023 10:39:45 PM hudson.remoting.jnlp.Main$CuiListener status
INFO: Locating server among [http://172.29.9.101:8080/]
Mar 19, 2023 10:39:46 PM org.jenkinsci.remoting.engine.JnlpAgentEndpointResolver resolve
INFO: Remoting server accepts the following protocols: [JNLP4-connect, Ping]
Mar 19, 2023 10:39:46 PM hudson.remoting.jnlp.Main$CuiListener status
INFO: Agent discovery successful
  Agent address: 172.29.9.101
  Agent port:    50000 #注意这里
  Identity:      3a:67:65:d5:5b:d8:e5:f4:fa:4b:1a:9c:93:d9:36:0d
Mar 19, 2023 10:39:46 PM hudson.remoting.jnlp.Main$CuiListener status
INFO: Handshaking
Mar 19, 2023 10:39:46 PM hudson.remoting.jnlp.Main$CuiListener status
INFO: Connecting to 172.29.9.101:50000
Mar 19, 2023 10:39:46 PM hudson.remoting.jnlp.Main$CuiListener status
INFO: Trying protocol: JNLP4-connect
Mar 19, 2023 10:39:46 PM org.jenkinsci.remoting.protocol.impl.BIONetworkLayer$Reader run
INFO: Waiting for ProtocolStack to start.
Mar 19, 2023 10:39:46 PM hudson.remoting.jnlp.Main$CuiListener status
INFO: Remote identity confirmed: 3a:67:65:d5:5b:d8:e5:f4:fa:4b:1a:9c:93:d9:36:0d
Mar 19, 2023 10:39:46 PM hudson.remoting.jnlp.Main$CuiListener status
INFO: Connected #注意这里
  • 此时刷新下web页面,我么可以看到bulid01 agent节点状态正常了:

image-20230319224053860

  • 但是,现在有个问题,当我们把这个脚本退出后,这个agent程序就退出了:

image-20230319224115043

image-20230319224130682

  • 此时,该怎么办呢?可以在启动脚本里修改下配置,使其脚本在后台运行:
bash
#改进脚本
[root@Devops6 jenkins_agent]#pwd
/data/devops6/jenkins_agent
[root@Devops6 jenkins_agent]#vim start.sh 
#!/bin/bash
nohup java -jar agent.jar -jnlpUrl http://172.29.9.101:8080/computer/build01/jenkins-agent.jnlp -secret @secret-file -workDir "/opt/jenkinsagent" &

#我们再次启动脚本,然后刷新网页观察现象
[root@Devops6 jenkins_agent]#sh start.sh 
[root@Devops6 jenkins_agent]#nohup: appending output to ‘nohup.out’

[root@Devops6 jenkins_agent]#
[root@Devops6 jenkins_agent]#ps -aux|grep java
1000       7273 19.2 36.1 3063932 673612 pts/0  Sl+  22:50   0:44 java -Duser.home=/var/jenkins_home -Djenkins.model.Jenkins.slaveAgentPort=50000 -Dhudson.lifecycle=hudson.lifecycle.ExitLifecycle -jar /usr/share/jenkins/jenkins.war
root      16841 15.1  6.2 3192696 115852 pts/0  Sl   22:53   0:03 java -jar agent.jar -jnlpUrl http://172.29.9.101:8080/computer/build01/jenkins-agent.jnlp -secret @secret-file -workDir /opt/jenkinsagent
root      16901  0.0  0.0 112708   976 pts/0    S+   22:54   0:00 grep --color=auto java

image-20230319225510805

  • 设置开机启动脚本

⚠️ 注意:如果使用rc.local和crontab设置开机启动的话,是没有效果的;这里采用systemd方法来设置服务开机启动。

bash
[root@Devops6 ~]#vim /etc/systemd/system/jenkins-agent.service
[Unit]
Description=Jenkins Agent service
After=network.target

[Service]
Type=simple
User=root
WorkingDirectory=/opt/jenkinsagent
ExecStart=/usr/bin/java -jar /data/devops6/jenkins_agent/agent.jar -jnlpUrl http://172.29.9.101:8080/computer/build01/jenkins-agent.jnlp -secret @/data/devops6/jenkins_agent/secret-file
Restart=on-failure

[Install]
WantedBy=multi-user.target
bash
systemctl daemon-reload
systemctl enable jenkins-agent

image-20230320123958784

重启机器后测试:(符合预期)

image-20230320124059964

image-20230320124123814

也是可以通过sytemctl命令来启动/重启/关停这个服务的:

bash
systemctl start/restart jenkins-agent
systemctl stop jenkins-agent

至此,jenkins server节点和agent节点已全部安装成功。

  • 此时,给虚机做一个快照哦。

image-20230320125004206

测试结束。😘

关于我

我的博客主旨:

  • 排版美观,语言精炼;
  • 文档即手册,步骤明细,拒绝埋坑,提供源码;
  • 本人实战文档都是亲测成功的,各位小伙伴在实际操作过程中如有什么疑问,可随时联系本人帮您解决问题,让我们一起进步!

🍀 微信二维码 x2675263825 (舍得), qq:2675263825。

image-20230107215114763

🍀 微信公众号 《云原生架构师实战》

image-20230107215126971

🍀 语雀

https://www.yuque.com/xyy-onlyone

image-20230306221144511

🍀 csdn https://blog.csdn.net/weixin_39246554?spm=1010.2135.3001.5421

image-20230107215149885

🍀 知乎 https://www.zhihu.com/people/foryouone

image-20230107215203185

最后

好了,关于本次就到这里了,感谢大家阅读,最后祝大家生活快乐,每天都过的有意义哦,我们下期见!

image-20230320125545393

最近更新